package com.briup.day10;



import com.sun.xml.internal.ws.util.StringUtils;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Objects;

/**
 * @author lining
 * @date 2024/1/19 14:39
 */
public class TestString {
    public void method(){
        //1.创建字符串方式
        String s = new String();//表示创建一个空字符串
        String s2 = new String("abc");//表示字符串abc
        char[] arr = {'a','b','c'};
        String s3 = new String(arr);//表示由abc字符串
        byte[] bytes = {97,98,99};
        String s4 = new String(bytes);//表示abc字符串
        System.out.println(s);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
    }
    public void method2(){
        String s = new String("abc");//表示字符串abc
        //获取对象的s的16进制地址值
        System.out.println(Integer.toHexString(System.identityHashCode(s)));
        //字符串的长度
        int size = s.length();
        System.out.println(size);

    }
    public void method3(){
        String s = "abc";//在字符串常量池中新建一个字符串对象abc
        String s2 = "abc";//先到池中找有没有abc对象，如果有直接使用，如果没有创建好，再使用
        //使用字符串常量拼接后使用常量池中的对象
        String s3 = "a"+"b"+"c";//

        String s4 = "ab";
        s4 = s4 + "c";//变量和常量拼接，使用堆新建对象

        System.out.println(s4);//abc
        System.out.println("s == s4："+(s == s4));//结果：
        System.out.println("s4:"+System.identityHashCode(s4));
        System.out.println(s3);// abc
        System.out.println(s == s2);
        System.out.println(s == s3);
        System.out.println("地址值："+System.identityHashCode(s));
        System.out.println(System.identityHashCode(s2));
        System.out.println(System.identityHashCode(s3));
    }
    public void method5(){
        System.out.println("------");
        String s = new String("abc");//堆中新建对象
        String s2 = "abc";//从字符串常量池中获取到
        System.out.println(s == s2);//false
        String s3 = new String("abc");//堆中新建对象
        System.out.println(s == s3);
        //考题：
        String a = "abc";//字符串常量池中保存abc对象
        //引用b没有指向堆空间 指向字符串常量池中常量对象
        String b = new String("abc").intern();//如果池中有这个abc对象,返回abc对象引用进行使用
        System.out.println(a == b);//true
        //x指向常量池中对象
        String x = new String("abc").intern();//常量池
        String y = "ab";
        y = y + "c";//堆中新建对象
        System.out.println("x== y:"+(x == y.intern()));
    }
    public void method6(){
        //比较字符串内容组成：一定使用equals
        String s = "a"+"b"+"c";
        String s2 = new String("a")+new String("b")+new String("c");
        System.out.println(s.equals(s2));
        //字符串中静态方法调用
        //valueOf 将其他类型转换为String类型
        String s3 = String.valueOf(10);
        String s4 = String.valueOf('a');
        // a-b-c-d
        String result = String.join("-", "a", "b", "c");
        System.out.println(result);
    }
    public void method7() throws Exception{
        //实现对字符串CRUD;
        String s = "abcdefg";
        System.out.println(s.length());//长度
        //UTF-8(一个汉字使用3个字节表示)  GBK（一个汉字使用2个字节存储）  编码方式
        String s2 = "你好";
        //编码
        System.out.println(Arrays.toString(s2.getBytes("utf-8")));
        System.out.println(Arrays.toString(s2.getBytes("GBK")));
        //解码
        byte[] arr = {-28, -67, -96, -27, -91, -67};
        String msg = new String(arr, "utf-8");
        System.out.println(msg);
    }
    public void method8(){
        String s = "abcdefg";//内存存储常量 只能被赋值一次
        System.out.println(s.charAt(1));
        String s2 = s.concat("xyz");//拼接 +
        System.out.println(s2);
        //不包含endindex值
        String s3 = s.substring(1, 3);//abcdcdedit
        System.out.println(s3);
        System.out.println("abc".toUpperCase());//转大写
        System.out.println("ABC".toLowerCase());//转小写
        boolean flag = s.contains("ab");
        System.out.println(flag);
    }
    public static boolean stringIsEmpty(String msg){
        return msg == null || msg.isEmpty()|| msg.trim().isEmpty();
    }
    public void login(String username,String password){
        //1.选判断用户是否输入了有效的信息（判断字符串是否为空）
        if(stringIsEmpty(username)){
            System.out.println("用户名为空");
        }
        if(stringIsEmpty(password)){
            System.out.println("密码为空");
        }
        //使用工具类封装一个3个方法
    }

    /**
     * 判断code 和msg 2个验证码是否相同
     * @param code
     * @param msg
     * @return
     */
    public boolean isEquals(String code,String msg){
        if(Objects.isNull(msg) && Objects.isNull(code)) return  false;
        return code.toLowerCase().equals(msg.toLowerCase());
    }
    public void method9(){
        boolean empty = "abcd".isEmpty();
        System.out.println(empty);
        String s2 = " a ".trim();
        System.out.println(s2);

        //判断字符串是否为空 输入一个用户名
        TestString t = new TestString();
        t.login(null,"123456");
        t.login("","123456");
        t.login("     ","123456");
    }
    public static void main(String[] args) throws UnsupportedEncodingException {
        //判断开头和结尾字符串
        System.out.println("abcdef".startsWith("a"));
        System.out.println("abcd".endsWith("d"));
        String sql = "select * from t_student;";
        if (!sql.endsWith(";")){
            System.out.println("不是一条sql");
        }
        String a = "abcd";
        a.replace('a', 'x');//创建新的字符串对象，然后a->x
        System.out.println(a);
        //字符串分割split "a|b|c|d,e...z"
        char[] arr = new char[26];
        int temp = 97;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (char) temp++;
        }
        System.out.println(Arrays.toString(arr));
        //数组--每个元素->String--->join
        String msg = Arrays.toString(arr)
                .substring(1, arr.length*3-1)
                .replace(",","|")
                .replace(" ","");
        System.out.println("msg"+msg);
        // [a-c]  [0-9]
//        String[] newArr = msg.split("[|]");//
        String[] newArr = msg.split("\\|");//
        System.out.println("newArr:"+Arrays.toString(newArr));
        //字符串转换字符数组
        char[] charArray = "abcd".toCharArray();//新建一个数组，将原来字符复制新数组
        charArray[0] = 'f';
        System.out.println(Arrays.toString(charArray));//fbcd
    }
}
